
import Vue from "vue";
import Vuex from "vuex";
import {userWxlogin} from '@/api/users'

Vue.use(Vuex)

const store = new Vuex.Store({
    state:{
        cartList:uni.getStorageSync('cartList') || [],
        userProfile:uni.getStorageSync('userProfile')||{}
    },
    mutations:{
        setCartList(state,payload){
            //更新购物车数据
            state.cartList = payload
            // 同步到本地存储（数据缓存）
            uni.setStorageSync('cartList',payload)
        },
        setUserProfile(state,payload){
            state.userProfile = payload,
            //同步到本地存储
            uni.setStorageSync('userProfile', payload)
        }
    },
    getters:{
        isAllSelect(state,getters){
            // every()
            return state.cartList.every(v=>v.goods_select)
        },
        // 选中的商品列表
        selectCartList(state){
            return state.cartList.filter(v=>v.goods_select)
        },
        // 基于选中的列表计算总钱数
        selectCartListPrice(state,getters){
            console.log('getters',getters)
            let sum = 0
            getters.selectCartList.forEach(element => {
                sum += element.goods_price * element.goods_count
            });
            return sum
        },
        seleCartListCount(state,getters){
            let selectCount = 0
             getters.selectCartList.forEach(element => {
                selectCount += element.goods_count
             });
             return selectCount
        }

    },
    actions:{
        async userWxLogin(store){
             // 提前说明：小程序后端登录的Api需要专属的appid才可以实现
            // appid在后端写死的
            // 1.获取微信的登录信息
            // 1.1获取用户信息-获取到登录接口所需的四个参数
           const [userInfoError,userInfoRes] = await uni.getUserInfo()
           console.log('userInfoError',userInfoError,'userInfoRes',userInfoRes)
           const {encryptedData,rawData,iv,signature} = userInfoRes

        //    1.2获取登录凭证验证码
        const [loginError,loginRes] = await  uni.login()
        const {code} = loginRes
        console.log('loginError',loginError,'loginRes',loginRes)

        const data={
            signature,
            iv,
            encryptedData,
            rawData,
            code
        }
        console.log('wxdata',data)

        // 2获取用户token
        const res = await userWxlogin(data)
        console.log('res',res)
        //    接口有可能返回null，直接退出
        if(!res.data.message){
            return uni.showToast({
                title: '登录失败',
                icon: 'error',
                mask: true
            })
        }

        console.log('~~~~~~~~~~~~~~~~~~~~~~~~~')
        //全局管理状态,因为其他页面的组件也都需要使用token和用户信息
        store.commit('setUserProfile',res.data.message)
        const {token} = res.data.message
        console.log('token',token)
        }
    }
})

export default store